package com.binhthuan.catechist.client.dto;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import name.pehl.piriti.client.json.Json;
import name.pehl.piriti.client.json.JsonReader;
import name.pehl.piriti.client.json.JsonWriter;

import com.google.gwt.core.client.GWT;

/**
 * @author Giang Đinh - Bảng điểm danh lớp, tương ứng với bảng
 *         <b>bang_diem_danh</b> trong cơ sở dữ liệu.
 */
public class AttendanceReport {
    
    public interface AttendanceReportReader extends JsonReader<AttendanceReport> {
    }
    public interface AttendanceReportWriter extends JsonWriter<AttendanceReport> {
    }

    public static AttendanceReportReader READER = GWT.create(AttendanceReportReader.class);
    public static AttendanceReportWriter WRITER = GWT.create(AttendanceReportWriter.class);
    
    /**
     * Mã bảng điểm danh.
     */
    @Json
    private Integer id;
    
    /**
     * Lớp.
     */
    @Json
    private DoctrineClass doctrineClass;
    
    /**
     * Ngày học.
     */
    @Json
    private Schedule scheduleDay;
    
    /**
     * Ghi chú.
     */
    @Json
    private String comment;
    
    /**
     * Người tạo.
     */
    @Json
    private Catechist createPerson;
    
    /**
     * Ngày tạo.
     */
    @Json
    private Date createTime;
    
    /**
     * Danh sách điểm danh.
     */
    @Json
    private Set<Attendance> attendances;

    public AttendanceReport() {
        attendances = new HashSet<Attendance>(0);
    }
    
    /**
     * Lấy mã sổ điểm danh.
     * @return Mã sổ điểm danh.
     */
    public Integer getId() {
        return id;
    }

    /**
     * Gán mã sổ điểm danh.
     * @param id
     *            Mã sổ điểm danh.
     */
    public void setId(Integer id) {
        this.id = id;
    }

    /**
     * Lấy lớp học.
     * @return Lớp học.
     */
    public DoctrineClass getDoctrineClass() {
        return doctrineClass;
    }

    /**
     * Gán lớp học.
     * @param doctrineClass
     *            Lớp học.
     */
    public void setDoctrineClass(DoctrineClass doctrineClass) {
        this.doctrineClass = doctrineClass;
    }

    /**
     * Lấy ngày học.
     * @return Ngày học.
     */
    public Schedule getScheduleDay() {
        return scheduleDay;
    }

    /**
     * Gán ngày học.
     * @param day
     *            Ngày học.
     */
    public void setScheduleDay(Schedule day) {
        this.scheduleDay = day;
    }

    /**
     * Lấy ghi chú.
     * @return Ghi chú.
     */
    public String getComment() {
        return comment;
    }

    /**
     * Gán ghi chú.
     * @param comment
     *            Ghi chú.
     */
    public void setComment(String comment) {
        this.comment = comment;
    }

    /**
     * Lấy người tạo.
     * @return Người tạo
     */
    public Catechist getCreatePerson() {
        return createPerson;
    }

    /**
     * Gán người tạo.
     * @param createPerson 
     *            Người tạo.
     */
    public void setCreatePerson(Catechist createPerson) {
        this.createPerson = createPerson;
    }

    /**
     * Lấy thời gian tạo sổ điểm danh.
     * @return Thời gian tạo sổ điểm danh.
     */
    public Date getCreateTime() {
        return createTime;
    }

    /**
     * Gán Thời gian tạo sổ điểm danh.
     * @param createTime 
     *            Thời gian tạo sổ điểm danh.
     */
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    /**
     * @return the attendances
     */
    public Set<Attendance> getAttendances() {
        return attendances;
    }

    /**
     * @param attendances the attendances to set
     */
    public void setAttendances(Set<Attendance> attendances) {
        this.attendances = attendances;
    }
}
